Skip to content

Autocomplete #3484

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 46 commits into from
Closed

Conversation

ricardojlrufino
Copy link
Contributor

Working log

Autocomplete

(https://gist.github.com/ricardojlrufino/19f89884162be39d851a)

Indexing of Libraries Classes

 [*] Arduino Core (AVR)
    NOTE: I believe you need to make manual adjustments, remove some useless things and add other (eg contants HIGH, LOW)
          I'm not reading the #DEFINE for 'variables', because it will turn a mess.  
 [x] Multi Editor (many instances) support.
 [x] User Lib's(3rd-party libs)
 [x] Arduino Default Lib's
 [x] Inheritance Support  (Ex: Serial -> Stream -> Print)
 [ ] Index only the important files of libs (for now is taking all .h)  

Autocomplete methods Classes

- [X] Instances
- [X] Static Classes
- [X] Pointer 
- [X] Get the parameters of methods
- [X] Auto-Complete using partial name method (contains!)
- [X] Order by type
- [x] Handle Struct
     [x] Handle static definition (Ex: EEPROM)
- [*] Handle extern (Ex: extern SPIClass SPI || extern EthernetClass Ethernet).
      [] Multiple alias Ex: Serial1, Serial2, etc...
- [*] '#define' statements 
      I'm not reading the #DEFINE for 'variables', because it will turn a mess. 
      NOTE: not parsing blocks like: "#if defined(UBRR1H) extern HardwareSerial Serial1;" in HardwareSerial.h    
  [*] Disable on External MODE.

Sketck - Autocomplete code being edited

  [x] Show only included Classes.
  [x] Show the variables of the current scope (use offset techniques)
     [x] Detect current function (based at the cursor location)
     [x] Update the position (offset) of the functions when the document is modified (new lines), without making the parser.
     |- NOTES:
     |- In Autocomplete they must appear first (deone).
     |- Not perfect, variables declared in blocks (if / while) are considered as function scope, to improve the performace
  [] Renaming / save as you must update the name in the Autocomplete Cache
     - have to remove the libraries that BEEN REMOVED (imports removed ..) ...
  [x] Parse source in-memory (do not need to save)
  [x] No show 'functions' outsite functions, only show classes
  [x] Detect custom variable names (EthernetClient client)
  [x] When you open the existing Sketch loads the autocomplete for the added LIBs
  [*] Parser in real time: 
      [x] Make the parser of changed line (ending with ';') and extract variables (and possibly errors).
      [x] Perform parse if you are changing a line with errors (syntax)
      [x] Perform parse if you are changing a line with errors (after compile)
      [x] Perform parse if you are changing a line with variable declararion.

      [] Enhancement: Parser current line using REXEX (for performance)
      - IMPL NOTE: For while it is being made a parser all code, is fast but could be better
                   The whole parser was necessary because i had to update the position (offset) of the methods in the document, 
                   but now this is already being done, I think a REGEX can be better    
      - NOTE: Only a parser(for same file) can run at the same time

[x] Async(Multi-tread) library parser... (based on Eclipse CDT AST Parser)
This is a external project: 'cplus-libparser', which can be used in other projects. ;)

[ ] Auto-Detect libraries dependency.
Related BUG: https://code.google.com/p/arduino/issues/detail?id=236
#2174

[x] Auto generate variable names (ALT + ENTER) inside a function call (Ex: digitalRead(var))
[x] After inserting into code, it must also appear in autocomplete

[*] Auto-Complete of the main functions parameters
Ex: Serial.begin({lista develocidades}), digitalWrite( {variables} , [HIGH / LOW])
[ ] This information should be captured from the source code (documentation)

[*] Show syntax(parser) error's
NOTE: need to be well tested, I did a few tests

[x] Autocomplete for #include pick up all the libraries;
NOTE: The window of the options just close with ESC or when you click with the MOUSE out, not close with TAB

[*] - Update LibraryIndex/Autocomplete on change libs of sketch
[x] Fire on Import from Menu
[ ] Fire on Import from ZIP.

[*] Store/Load parsed result in lib.index on each folder..
[ ] establish policies to update the index (LibraryChangeMonitor (only for h. files))
- How to deal with the upgrade of core libraries? must validate the version?
[x] You may want to implement a Serializer / Deserializer (NOTE:for now the index is binary )

[] Use 'javax.swing.text.Document' to parser, to avoid strings allocations
TODO: It has not been confirmed whether there is this problem. but I think so ...
Need implement: org.eclipse.cdt.internal.core.parser.scanner.AbstractCharArray

[x] Automatic adjustment of the position of the tooltip(completions window) to left or right

[] BUG(linux): The autocomplete window not working when you have another window "always on TOP"

[x] Autocomplete Shortcut's

  • dw,dr,aw,ar (digitalWrite, digitalRead, analogWrite, analogRead)
  • for,if,while,println

[x] Autocomplete of Sketch with multiple files
[x] BUG: When the SAVE event is launched cache and clean and only the modified classes are analyzed
[x] includes with global methods.
[x] includes with structs and static var.
[x] SyntaxErrorMarker - when a error occur, the highlight appear in two tabs
[x] #include - add other files of current Sketch in autocomplete for #include

[x] Compiler/SyntaxError - show multiple compiler erros at same time

[x] BUG - autocomplete cache/listeners problem on 'saveAs' sketch (It is keeping two versions)

[ ] Parse AVR Includes (/hardware/tools/avr/avr/include)
NOTE: At the moment I'm not sure which files should be done parser
PROBLEM: Including this autocomplete list can become large and confusing

access to Sketck information in the package 'core'
LastUndoableEditAwareUndoManager
desktop (with SplashScreen)
-Best ICON for Alt+TAB
 Necessary in Linux to show the window name correctly
Conflicts:
	app/src/processing/app/Base.java
	app/src/processing/app/Editor.java
	app/test/processing/app/helpers/ArduinoFrameFixture.java
Merge remote-tracking branch 'origin/1.6.x-autocomplete-neweditor' into 1.6.5-autocomplete

New Fixes:
[x] Autocomplete of Sketch with multiple files
   [x] BUG: When the SAVE event is launched cache and clean and only the modified classes are analyzed
   [x] includes with global methods.
   [x] includes with structs and static var.
   [x] SyntaxErrorMarker - when a error occur, the highlight appear in two tabs
   [x] #include - add other files of current Sketch in autocomplete for #include

Conflicts:
	app/.classpath
	app/.classpath_vista
	app/run-linux.launch
	app/src/cc/arduino/packages/formatter/AStyle.java
	app/src/processing/app/Base.java
	app/src/processing/app/CaretAwareUndoableEdit.java
	app/src/processing/app/Editor.java
	app/src/processing/app/EditorLineStatus.java
	app/src/processing/app/EditorListener.java
	app/src/processing/app/Sketch.java
	app/src/processing/app/SketchCodeDocument.java
	app/src/processing/app/Theme.java
	app/src/processing/app/helpers/ConsoleLogger.java
	app/src/processing/app/helpers/LogFormatter.java
	app/src/processing/app/syntax/PdeKeywords.java
	app/src/processing/app/syntax/SketchTextArea.java
	app/src/processing/app/syntax/SketchTokenMaker.java
	app/test/processing/app/AutoformatSavesCaretPositionTest.java
	app/test/processing/app/AutoformatTest.java
	app/test/processing/app/BlockCommentGeneratesOneUndoActionTest.java
	app/test/processing/app/HittingEscapeOnCloseConfirmationDialogTest.java
	app/test/processing/app/ReduceIndentWith1CharOnLastLineTest.java
	app/test/processing/app/ReplacingTextGeneratesTwoUndoActionsTest.java
	app/test/processing/app/helpers/ArduinoFrameFixture.java
	app/test/processing/app/helpers/RSyntaxTextAreaComponentDriver.java
	arduino-core/.classpath
	arduino-core/src/processing/app/SketchData.java
	arduino-core/src/processing/app/debug/Compiler.java
	arduino-core/src/processing/app/helpers/StringUtils.java
	arduino-core/src/processing/app/helpers/filefilters/OnlyFilesWithExtension.java
	arduino-core/src/processing/app/packages/LibraryList.java
	build/build.xml
	build/linux/dist/arduino
	build/linux/dist/install.sh
	build/macosx/template.app/Contents/Info.plist
	build/shared/lib/theme/syntax/dark.xml
	build/shared/lib/theme/syntax/default.xml
	build/windows/dist/drivers/arduino.inf
	build/windows/launcher/config.xml
	build/windows/launcher/config_debug.xml
	libraries/Esplora/library.properties
	libraries/Ethernet/library.properties
	libraries/Firmata/library.properties
	libraries/LiquidCrystal/library.properties
	libraries/SD/library.properties
	libraries/SD/src/utility/Sd2Card.cpp
	libraries/Scheduler/library.properties
	libraries/Stepper/library.properties
	libraries/TFT/library.properties
	libraries/USBHost/library.properties
@Chris--A
Copy link
Contributor

Chris--A commented Jul 9, 2015

I saw the video of this a while ago and it looks really cool.
I would really like to try this out once the merge conflicts are resolved.

@facchinm
Copy link
Member

Superseded by #6235

@facchinm facchinm closed this Nov 13, 2017
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants